home *** CD-ROM | disk | FTP | other *** search
/ PC Professionell 2005 June / PCpro_2005_06.ISO / files / opensource / amc / amc_install.exe / {app} / Scripts / dvdsinside.de.ifs < prev    next >
Encoding:
Text File  |  2005-03-13  |  11.5 KB  |  383 lines

  1. (***************************************************
  2.  
  3. Ant Movie Catalog importation script
  4. www.antp.be/software/moviecatalog/
  5.  
  6. [Infos]
  7. Authors=Tiziano Mⁿller
  8. Title=dvd-inside
  9. Description=dvd-inside (DE/CH) import
  10. Site=www.dvd-inside.de
  11. Language=DE
  12. Version=0.2 - 16.January 2005
  13. Requires=3.5.0
  14. Comments= DVD-Inside (www.dvd-inside.de)| v0.1 - 2. Week 2005: "From scratch"| v0.2 - 16.January 2005: "Rewritten"| This script is based on the IMDB-script.| So, credits go to the authors of the IMDB-script.
  15. License=This program is free software; you can redistribute it and/or modify it under the  terms of the GNU General Public License as published by the Free Software Foundation;  either version 2 of the License, or (at your option) any later version. |
  16. GetInfo=1
  17.  
  18. [Options]
  19.  
  20. ***************************************************)
  21.  
  22. program dvd_inside;
  23.  
  24. const
  25.   CRLF = #13#10;
  26.  
  27. var
  28.   MovieName: string;
  29.   MovieURL: string;
  30.  
  31. function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer;
  32. var
  33.   i: Integer;
  34. begin
  35.   result := -1;
  36.   if StartAt < 0 then
  37.     StartAt := 0;
  38.   for i := StartAt to List.Count-1 do
  39.     if Pos(Pattern, List.GetString(i)) <> 0 then
  40.     begin
  41.       result := i;
  42.       Break;
  43.     end;
  44. end;
  45.  
  46. function MyTrim(str_: string): string;
  47. var
  48.   chars: array of char;
  49.   StrLen, i, LastSpacePos: integer;
  50. begin
  51.   result := '';
  52.  
  53.   str_ := StringReplace(str_, #9, '');
  54.   str_ := StringReplace(str_, #10, '');
  55.   str_ := StringReplace(str_, #13, '');
  56.  
  57.  
  58.   while Pos(' ', str_) = 1 do
  59.   begin
  60.     Delete(str_, Pos(' ', str_), 1);
  61.   end;
  62.  
  63.   StrLen := Length(str_);
  64.   SetArrayLength(chars, StrLen);
  65.   for i := 0 to StrLen-1 do
  66.   begin
  67.     chars[i] := Copy(str_,i+1,1);
  68.   end;
  69.  
  70.   str_ := '';
  71.   LastSpacePos := StrLen - 1;
  72.   if LastSpacePos > -1 then
  73.   begin
  74.     while chars[LastSpacePos] = ' ' do
  75.     begin
  76.       LastSpacePos := LastSpacePos - 1;
  77.     end;
  78.     for i:= 0 to LastSpacePos do
  79.     begin
  80.       str_ := str_ + chars[i];
  81.     end;
  82.   end;
  83.  
  84.   str_ := StringReplace(str_, '  ', ' ');
  85.   while result <> str_ do
  86.   begin
  87.     result := str_;
  88.     str_ := StringReplace(str_, '  ', ' ');
  89.   end;
  90.   result := StringReplace(result, ' ,', ',');
  91.  
  92. end;
  93.  
  94. procedure CutAfter(var str_: string; Pattern: string);
  95. begin
  96.   str_ := Copy(str_, Pos(Pattern, str_) + Length(Pattern), Length(str_));
  97. end;
  98.  
  99. procedure CutBefore(var Str: string; Pattern: string);
  100. begin
  101.   Str := Copy(Str, Pos(Pattern, Str), Length(Str));
  102. end;
  103.  
  104. function GetStringBetween(str_, StartTag, EndTag: string): string;
  105. var
  106.   BeginPos, EndPos: integer;
  107. begin
  108.   result := '';
  109.   if EndTag = '' then
  110.   begin
  111.     EndPos := Length(str_);
  112.   end
  113.   else
  114.     EndPos := Pos(EndTag, str_);
  115.  
  116.   BeginPos := Pos(StartTag, str_) + Length(StartTag);
  117.   if StartTag = '' then BeginPos := 1;
  118.   if BeginPos > 0 then result := Copy(str_, BeginPos, EndPos - BeginPos);
  119.  
  120. end;
  121.  
  122. function GetTrimmedStringBetween(str_, StartTag, EndTag: string): string;
  123. begin
  124.   result := MyTrim(GetStringBetween(str_, StartTag, EndTag));
  125. end;
  126.  
  127. // Extracts single movie detail (like director, genre) from page
  128. function GetStringFromHTML(Page, StartTag, CutTag, EndTag: string): string;
  129. begin
  130.   Result := '';
  131.   // recognition tag - if present, extract detail from page, otherwise assume detail is not present
  132.   if Pos(StartTag, Page) > 0 then begin
  133.     CutBefore(Page, StartTag);
  134.     // optional cut tag helps finding right string in html page
  135.     if Length(CutTag) > 0 then
  136.       CutAfter(Page, CutTag);
  137.     // movie detail copied with html tags up to end string
  138.     Result := Copy(Page, 0, Pos(EndTag, Page) - 1);
  139.     // remove html tags and decode html string
  140. //    HTMLRemoveTags(Result);
  141.     HTMLDecode(Result);
  142.   end;
  143. end;
  144.  
  145. function StripHTMLTags(str_: string): string;
  146. var
  147.   temp_char : char;
  148.   StrLen, i, CharPos : integer;
  149.   DoCopy : boolean;
  150. begin
  151.   DoCopy := true;
  152.   CharPos := 0;
  153.   result := '';
  154.   StrLen := Length(str_);
  155.   for i := 1 to StrLen do
  156.   begin
  157.     temp_char := Copy(str_,i,1);
  158.     if temp_char = '<' then
  159.     begin
  160.       DoCopy := false;
  161.       continue;
  162.     end
  163.     else if temp_char = '>' then
  164.     begin
  165.       DoCopy := true;
  166.       continue;
  167.     end
  168.     else
  169.     begin
  170.       if DoCopy then
  171.       begin
  172.         result := result + temp_char;
  173.       end;
  174.     end;
  175.   end;
  176.  
  177. end;
  178.  
  179. procedure AnalyzeIndexPage(Address, Params: string);
  180. var
  181.   IndexPage: TStringList;
  182.   Page: string;
  183. begin
  184.   IndexPage := TStringList.Create;
  185.   Address := URLEncode(Address);
  186.   Params := URLEncode(Params);
  187.   IndexPage.Text := PostPage(Address,Params);
  188.  
  189.   PickTreeClear;
  190.   PickTreeAdd('Search results', '');
  191.   AddMoviesTitles(IndexPage);
  192.   if PickTreeExec(Address) then
  193.   begin
  194.     Page := GetPage(Address);
  195.     AnalyzeMoviePage(Page, Address);
  196.   end;
  197.   IndexPage.Free;
  198. end;
  199.  
  200.  
  201.  
  202. procedure AnalyzeMoviePage(Page,Address: string);
  203. var
  204.   StrPosition: Integer;
  205.   StrTemp: string;
  206.  
  207.   OriginalTitle, Country, Year, Genre, Studio, Region, EAN_Number, Distributor, AFK, Duration: string;
  208.   VideoFormat, ScreenFormat, ScreenSystem, Language, AudioFormat, Subtitle, MediaType, Disks: string;
  209.   Comments, Bonusmaterial, Packaging, TranslatedTitle, Director, Cast, Producer, Description: string;
  210.   Music, Screenplay: string;
  211.  
  212. begin
  213. // Initializing the very important Comments
  214.   Comments := '';
  215. // URL
  216.   SetField(fieldURL, Address);
  217.  
  218. // Translated title
  219.   TranslatedTitle := MyTrim(GetStringFromHTML(Page,'<b class="ueberschrift">','">','</b>'));
  220.   SetField(fieldTranslatedTitle, TranslatedTitle);
  221.  
  222. // Original-Title, Country and Year
  223.   StrTemp := MyTrim(GetStringFromHTML(Page, 'Originaltitel:','<td>','</td>'));
  224.   StrTemp := StripHTMLTags(StrTemp);
  225.   OriginalTitle := GetTrimmedStringBetween(StrTemp,'','(');
  226.   StrTemp := GetTrimmedStringBetween(StrTemp,'(',')');
  227.   Country := Copy(StrTemp,1,Length(StrTemp)-4);
  228.   Year := Copy(StrTemp,Length(StrTemp)-4,Length(StrTemp));
  229.  
  230.   SetField(fieldOriginalTitle, OriginalTitle);
  231.   SetField(fieldCountry, Country);
  232.   SetField(fieldYear, Year);
  233.  
  234. // EAN-Number
  235.  
  236.   EAN_Number := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'EAN-Nummer:','<td>', '</td>')));
  237.   Comments := Comments + 'EAN-Nummer: ' + EAN_Number + CRLF;
  238.  
  239. // Genre
  240.   Genre := '';
  241.   Genre := MyTrim(GetStringFromHTML(Page, 'Genre:', '<td>', '</td>'));
  242.   Genre := MyTrim(StripHTMLTags(Genre));
  243.   setField(fieldCategory, Genre);
  244.  
  245. // Studio
  246.   Studio := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Studio:','</td>', '</tr>')));
  247.   Comments := Comments + 'Studio: ' + Studio + CRLF;
  248.  
  249. // Distributor
  250.   Distributor := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Vertrieb:','</td>', '</tr>')));
  251.   Comments := Comments + 'Vertrieb: ' + Distributor + CRLF;
  252.  
  253. // Altersfreigabe
  254.   AFK := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Altersfreigabe:','</td>', '</tr>')));
  255.   Comments := Comments + 'Altersfreigabe: ' + AFK + CRLF;
  256.  
  257. // CountryCode
  258.   Region := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Ländercode:','</td>', '</tr>')));
  259.   VideoFormat := 'DVD Zone '+Region;
  260.   setField(fieldVideoFormat,VideoFormat);
  261.  
  262. // Duration
  263.   Duration := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Filmlänge:','</td>', '</tr>')));
  264.   Duration := StringReplace(Duration,' min','');
  265.   setField(fieldLength,Duration);
  266.  
  267. // Description
  268.   Description := GetStringFromHTML(Page, 'Inhalt:','</td>', '</tr>');
  269.   Description := StringReplace(Description, '<br />','*');
  270.   Description := MyTrim(StripHTMLTags(Description));
  271.   Description := StringReplace(Description, '*',CRLF);
  272.   setField(fieldDescription,Description);
  273.  
  274. // Actors
  275.   Cast := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Schauspieler:','</td>', '</tr>')));
  276.   setField(fieldActors,Cast);
  277.  
  278. // Director
  279.   Director := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Regie:','</td>', '</tr>')));
  280.   setField(fieldDirector,Director);
  281.  
  282. // Production
  283.   Producer := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Produzent:','</td>', '</tr>')));
  284.   setField(fieldProducer,Producer);
  285.  
  286. // Music
  287.   Music := '';
  288.   Music := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Music:','</td>', '</tr>')));
  289.   Comments := Comments + 'Musik: ' + Music + CRLF;
  290.  
  291. // Screenplay
  292.   Screenplay := '';
  293.   Screenplay := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Drehbuch:','</td>', '</tr>')));
  294.   Comments := Comments + 'Drehbuch: ' + Screenplay + CRLF;
  295.  
  296. // Screen format & system
  297.   ScreenFormat := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Format:','</td>', '</tr>')));
  298.   ScreenSystem := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'System:','</td>', '</tr>')));
  299.   setField(fieldResolution,ScreenSystem + ' - ' + ScreenFormat);
  300.  
  301. // Audioformat/Language
  302.   AudioFormat := '';
  303.   Language := '';
  304.   StrTemp := GetStringFromHTML(Page, 'Tonformate / Sprachen:', '</td>', '</td>');
  305.  
  306.   StrTemp := StringReplace(StrTemp, '<br />','*') + '*';
  307.   StrTemp := MyTrim(StripHTMLTags(StrTemp));
  308.  
  309.   while Pos('*',StrTemp) > 0 do
  310.   begin
  311.     AudioFormat := AudioFormat + ', ' + MyTrim(Copy(StrTemp,1,Pos(' in ',StrTemp)));
  312.     Language := Language + ', ' + MyTrim(Copy(StrTemp,Pos(' in ',StrTemp)+4,Pos('*',StrTemp)-(Pos(' in ',StrTemp)+4)));
  313.     CutAfter(StrTemp,'*');
  314.   end;
  315.   AudioFormat := Copy(AudioFormat,3,Length(AudioFormat));
  316.   Language := Copy(Language,3,Length(Language));
  317.  
  318.   setField(fieldAudioFormat, AudioFormat);
  319.   setField(fieldLanguages, Language);
  320.  
  321. // Subtitles
  322.   Subtitle := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Untertitel:', '</td>', '</tr>')));
  323.   if Subtitle = 'Keine Untertitel' then Subtitle := '';
  324.   setField(fieldSubtitles, Subtitle);
  325.  
  326. // Mediatype
  327.   MediaType := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Medientyp:','</td>', '</tr>')));
  328.   setField(fieldMediaType, MediaType);
  329.  
  330. // Disks
  331.   Disks := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Medienanzahl:','</td>', '</tr>')));
  332.   setField(fieldDisks, Disks);
  333.  
  334. // Package
  335.   Packaging := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Verpackung:', '</td>', '</tr>')));
  336.   Comments := Comments + 'Verpackung: ' + Packaging + CRLF;
  337.  
  338. // Bonusmaterial
  339.   Bonusmaterial := MyTrim(GetStringFromHTML(Page, 'Bonus-Matrial:', '</td>', '</tr>'));
  340.   Bonusmaterial := StringReplace(Bonusmaterial,'<br />','*');
  341.   Bonusmaterial := MyTrim(StripHTMLTags(Bonusmaterial));
  342.   Bonusmaterial := StringReplace(Bonusmaterial,'*',CRLF);
  343.   Comments := Comments + CRLF + 'Bonusmaterial' + CRLF + '===========' + CRLF + Bonusmaterial + CRLF;
  344.  
  345.  
  346.  
  347.   setField(fieldComments,Comments);
  348.   //DisplayResults;
  349. end;
  350.  
  351. procedure AddMoviesTitles(ResultsPage: TStringList);
  352. var
  353.   Page: string;
  354.   MovieTitle, MovieAddress: String;
  355. begin
  356.   Page := ResultsPage.Text;
  357.   while Pos('details.php', Page) > 0 do
  358.   begin
  359.     CutBefore(Page, 'details.php');
  360.     MovieAddress := 'http://www.dvd-inside.de/db/' + GetStringFromHTML(Page, 'details.php', '', '"');
  361.     MovieTitle := MyTrim(GetStringFromHTML(Page, 'details.php', '">', '</tr>'));
  362.     MovieTitle := StringReplace(MovieTitle, '</td>', ' | ');
  363.     MovieTitle := MyTrim(StripHTMLTags(MovieTitle));
  364.     CutAfter(Page, '</tr>');
  365.     PickTreeAdd(MovieTitle, MovieAddress);
  366.   end;
  367. end;
  368.  
  369. begin
  370.   if CheckVersion(3,5,0) then
  371.   begin
  372.     MovieName := GetField(fieldOriginalTitle);
  373.     if MovieName = '' then
  374.       MovieName := GetField(fieldTranslatedTitle);
  375.     if Input('dvd-inside import', 'Enter the title of the movie:', MovieName) then
  376.     begin
  377.       AnalyzeIndexPage('http://www.dvd-inside.de/db/search.php', 'action=new&title='+MovieName+'&suchen=Suchen');
  378.     end;
  379.   end
  380.   else
  381.   ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.5.0)');
  382. end.
  383.